package com.wxg.ch06;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * date ： 2018年9月28日
 * 测试 “移除最大值”，“移除最小值”
 *
 * 汗颜： `Random rand = new Random(47);` 每次重新测试得到的随机值是一样的。
 *      - `Random rand = new Random();` 可以保证重新测试时值是变化的
 *
 * 做数据生成及测试等工作还是 Python 简洁、节省时间，使用 Java 太繁琐了！
 */
public class MainV2 {
    public static void main(String[] args) {
        final int num = 100;
        Random rand = new Random();

        // ======= 测试“移除最小值” =======
        BST<Integer> bst = new BST<>();
        for (int i=0; i<num; i++){
            bst.add(rand.nextInt(1000));
        }
        List<Integer> list = new ArrayList<>();
        while (bst.size() != 0) {
            list.add(bst.removeMin());
        }
        System.out.println(list);

        // 这使用 `list.size()` 因为bst中可以有重复的元素, 实际元素个数`<=num`
        for (int i=1; i<list.size(); i++) { // i 从 1 开始, 这是个小细节
            if (list.get(i-1) > list.get(i)) {
                throw new RuntimeException(String.format("错误: list[%d] > list[%d]", (i-1), i));
            }
        }
        System.out.println("正确：是按顺序移除最小元素的");

        // ======= 测试“移除最大值” =======

        bst = new BST<>();
        for (int i=0; i<num; i++){
            bst.add(rand.nextInt(1000));
        }
        list.clear();
        while (bst.size() != 0) {
            list.add(bst.removeMax());
        }
        System.out.println(list);

        // 这使用 `list.size()` 因为bst中可以有重复的元素, 实际元素个数`<=num`
        for (int i=1; i<list.size(); i++) {
            if (list.get(i-1) < list.get(i)) {
                throw new RuntimeException(String.format("错误: list[%d] > list[%d]", (i-1), i));
            }
        }
        System.out.println("正确：是按顺序移除最大元素的");
    }
}
